package edu.asselvi.seguros.controle;

import java.io.BufferedReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import edu.asselvi.seguros.dao.ContratoDao;
import edu.asselvi.seguros.dao.ItemDao;
import edu.asselvi.seguros.dao.SinistroDao;
import edu.asselvi.seguros.db.ConnectionFactory;
import edu.asselvi.seguros.db.DbUtils;
import edu.asselvi.seguros.exception.ESegurosErrosGeral;
import edu.asselvi.seguros.exception.SegurosException;
import edu.asselvi.seguros.pojo.Contrato;
import edu.asselvi.seguros.pojo.Item;
import edu.asselvi.seguros.pojo.Sinistro;
import edu.asselvi.seguros.utils.Utils;


public class ControleSinistro extends DbUtils {

	BufferedReader in = null;

	public ControleSinistro(BufferedReader br) {
		this.in = br; 
	}

	public void cadastrar() {

		Connection conn = null;
		
		try {
			
			conn = new ConnectionFactory().getConnection();
			
			Utils utils = new Utils();
			
			Sinistro sinistro = new Sinistro();
			
			
			//primeiro lista todos os contratos cadastrados
			System.out.println("SELECIONE UM CONTRATO CADASTRADO");
			List<Contrato> contratos = new ContratoDao(conn).list();
			for (Contrato contrato: contratos) {
				System.out.println(contrato.toString());
			}
			//pega id do contrato para listar os itens do contrato
			System.out.println("CODIGO: ");
			int idContrato = Integer.parseInt(in.readLine());
			
			//================================================================
			
			//lista todos os itens do contrato seelcionado
			System.out.println("SELECIONE UM ITEM DO CONTRATO");
			List<Item> itens = new ItemDao(conn).listByContrato(idContrato);
			for (Item item : itens) {
				System.out.println(item.toString());
			}
			//pega id do item que recebera um  sinistro
			System.out.println("CODIGO: ");
			int idItem = (Integer.parseInt(in.readLine()));
			sinistro.setFk_id_item(idItem);
			
			//================================================================
			
			
			//coleta demais inforrmacoes sobre o sinistro
			
			System.out.print("DATA_SINISTRO: ");
				sinistro.setData_sinistro(utils.converteData(in.readLine()));
			System.out.print("DESCRICAO: ");
				sinistro.setDescricao(in.readLine());
			System.out.print("DOCUMENTACAO: ");
				sinistro.setDocumentacao(in.readLine());

			
			//salva no banco
			sinistro = new SinistroDao(conn).insert(sinistro); 
			System.out.println(sinistro.toString());

			//gera as faturas relacionadas
			Item item = new ItemDao(conn).getItem(idItem);
			Contrato contrato = new ContratoDao(conn).getContrato(idContrato);
			new ControleFatura().gerarFaturasSinistro(contrato, item);
			
			
		} catch (SegurosException e) {
			System.err.println(e.getMessage());
			
		} catch (IOException e) {
			System.err.println(ESegurosErrosGeral.ERRO_TECLADO);
			
		} catch (SQLException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_CONEXAO);
			
		} catch (NumberFormatException e) {
			System.err.println(ESegurosErrosGeral.ERRO_DE_FORMATO);
			
		} finally {
			close(conn);
		}
	}

	
	
}
